package org.example.ski_demo.controller;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import jakarta.annotation.Resource;
import org.example.ski_demo.entity.Admin;
import org.example.ski_demo.entity.User;
import org.example.ski_demo.form.LoginForm;
import org.example.ski_demo.service.AdminService;
import org.example.ski_demo.service.UserService;
import org.example.ski_demo.vo.ResultVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 登录控制器，处理管理员和普通用户的登录逻辑
 */
@RestController
public class LoginController {

    @Autowired
    private AdminService adminService;

    @Autowired
    private UserService userService;

    /**
     * 登录接口，接收 LoginForm 表单参数（用户名、密码、类型）
     * @param loginForm 登录信息封装类，包含 username, password, type
     * @return ResultVO 统一响应对象
     */
    @GetMapping("/login")
    public ResultVO login(LoginForm loginForm) {
        Object object;

        // 判断登录类型是否为 admin（管理员）
        if (loginForm.getType().equals("admin")) {
            QueryWrapper<Admin> queryWrapper = new QueryWrapper<>();
            queryWrapper.eq("username", loginForm.getUsername()); // 构造查询条件：username = ?

            Admin admin = this.adminService.getOne(queryWrapper); // 根据条件查询管理员
            if (admin == null) {
                return new ResultVO(-1, "用户名错误", null); // 用户名不存在
            }
            if (!admin.getPassword().equals(loginForm.getPassword())) {
                return new ResultVO(-1, "密码错误", null); // 密码不正确
            }

            return new ResultVO(0, "", admin); // 登录成功，返回 admin 数据
        }

        // 判断登录类型是否为 user（普通用户）
        else if (loginForm.getType().equals("user")) {
            QueryWrapper<User> queryWrapper = new QueryWrapper<>();
            queryWrapper.eq("username", loginForm.getUsername());

            User user = this.userService.getOne(queryWrapper);
            if (user == null) {
                return new ResultVO(-1, "用户名错误", null);
            }
            if (!user.getPassword().equals(loginForm.getPassword())) {
                return new ResultVO(-1, "密码错误", null);
            }

            return new ResultVO(0, "", user);
        }

        // 如果既不是 admin 也不是 user 类型，默认返回失败（应加一个 return 语句）
        return new ResultVO(-1, "非法用户类型", null);
    }
}
